package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.PlanNegocioDao;
import edu.upc.clase.demo.entity.PlanNegocio;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * @author gian
 */
@Repository
public class PlanNegocioDaoImpl extends SimpleJdbcDaoSupport implements PlanNegocioDao {

  private static Logger log = LoggerFactory.getLogger(PlanNegocioDaoImpl.class);

  @Autowired
  public PlanNegocioDaoImpl(DataSource dataSource) {
    log.info("Asignando el dataSource");
    setDataSource(dataSource);
  }

  @Override
  public Integer insertar(PlanNegocio PlanNegocio) {

    getJdbcTemplate().update(
            "insert into plandenegocio (codigo,titulo,fecharegistro,visionnegocio,"
            + "razonamiento,tiempoejecucion,inversiontotal,margenneto1anho,"
            + "precioventa,roi,cantidadvendida,rutaarchivo,idestado,idusuario ,idsubcategoria) "
            + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            PlanNegocio.getCodigo(), PlanNegocio.getTitulo(), PlanNegocio.getFecharegistro(), PlanNegocio.getVisionnegocio(),
            PlanNegocio.getRazonamiento(), PlanNegocio.getTiempoejecucion(), PlanNegocio.getInversiontotal(), PlanNegocio.getMargenneto1anho(),
            PlanNegocio.getPrecioventa(), PlanNegocio.getRoi(), PlanNegocio.getCantidadvendida(), PlanNegocio.getRutaarchivo(), PlanNegocio.getIdestado(), PlanNegocio.getIdusuario(), PlanNegocio.getIdsubcategoria());
    return getSimpleJdbcTemplate().queryForInt("select last_insert_id()");
  }

  @Override
  public void actualizar(PlanNegocio plandenegocio) {
    getJdbcTemplate().update(
            "update plandenegocio set codigo =?,titulo=?,fecharegistro=?,visionnegocio=?,"
            + " razonamiento=?,tiempoejecucion=?,inversiontotal=?,margenneto1anho=?,"
            + " precioventa=?,roi=?,cantidadvendida=?,rutaarchivo=?,idestado=?,idusuario =?,idsubcategoria=?"
            + " where idplannegocio = ?",
            plandenegocio.getCodigo(), plandenegocio.getTitulo(), plandenegocio.getFecharegistro(), plandenegocio.getVisionnegocio(),
            plandenegocio.getRazonamiento(), plandenegocio.getTiempoejecucion(), plandenegocio.getInversiontotal(), plandenegocio.getMargenneto1anho(),
            plandenegocio.getPrecioventa(), plandenegocio.getRoi(), plandenegocio.getCantidadvendida(), plandenegocio.getRutaarchivo(), plandenegocio.getIdestado(), plandenegocio.getIdusuario(), plandenegocio.getIdsubcategoria(), plandenegocio.getIdplannegocio());
  }

  @Override
  public void eliminar(PlanNegocio plandenegocio) {
    getJdbcTemplate().update(
            "delete from plandenegocio where idplannegocio = ?", plandenegocio.getIdplannegocio());
  }

  @Override
  public PlanNegocio buscar(Integer idplandenegocio) {
    try {
      return getSimpleJdbcTemplate().queryForObject(
              "select idplannegocio,codigo,titulo,fecharegistro,visionnegocio,razonamiento,tiempoejecucion,inversiontotal,margenneto1anho,precioventa,roi,cantidadvendida,rutaarchivo,idestado,idusuario ,idsubcategoria from plandenegocio where idplannegocio=?",
              new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class), idplandenegocio);
    } catch (EmptyResultDataAccessException e) {
      return null;
    }
  }

  @Override
  public List<PlanNegocio> buscarTodos() {
    return getSimpleJdbcTemplate().query(
            "select idplannegocio,codigo,titulo,fecharegistro,visionnegocio,razonamiento,tiempoejecucion,inversiontotal,margenneto1anho,precioventa,roi,cantidadvendida,rutaarchivo,idestado,idusuario ,idsubcategoria from plandenegocio Order By Codigo",
            new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class));
  }

  @Override
  public PlanNegocio buscarPorNombre(String nombre) {
    try {
      return getSimpleJdbcTemplate().queryForObject(
              "select idplannegocio,codigo,titulo,fecharegistro,visionnegocio,razonamiento,tiempoejecucion,inversiontotal,margenneto1anho,precioventa,roi,cantidadvendida,rutaarchivo,idestado,idusuario ,idsubcategoria from plandenegocio where titulo=?",
              new BeanPropertyRowMapper<PlanNegocio>(PlanNegocio.class), nombre);
    } catch (EmptyResultDataAccessException e) {
      return null;
    }
  }
}